3. RP→OPアソシエーション要求
OP Endpoint URLに対して、以下の要求を行う
OP Endpoint URL は、ユーザからの入力、もしくはディスカバリの実行により
取得する事ができる。
要求パラメータ(必須)
openid.ns = "http://specs.openid.net/auth/2.0"
openid.mode = "associate"
openid.assoc_type = ("HMAC-SHA1"|"HMAC-SHA256")
openid.session_type=("DH-SHA1"|"DH-SHA256"|"no-encryption")
Diffie-Hellman要求パラメータ
openid.dh_modules=base64(btwoc(p)) 公開鍵
openid.dh_gen=base64(btwoc(g))
openid.dh_consumer_public=base64(btwoc(g^xa mod p))
DH鍵共有方式については、RFC2631参照
http://www.ipa.go.jp/security/rfc/RFC2631JA.html
4. Diffie-Hellman 鍵共有法(DH 法)
Diffie と Hellman は、「共有された秘密(shared secret)」が盗聴者によって入手で
きない方法で、2者が秘密を共有するための方法を記述している。この秘密は、他の
(共通鍵)アルゴリズムのための暗号技術的な鍵とする材料に変換することができる。
Shared secret (ZZ) の生成
ZZ = g ^ (xb * xa) mod p
ZZ = (yb ^ xa) mod p = (ya ^ xb) mod p
ya は、主体 a の公開鍵; ya = g ^ xa mod p
yb は、主体 b の公開鍵; yb = g ^ xb mod p
xa は、主体 a の私有鍵
xb は、主体 b の私有鍵
pとqは、大きな素数
g = h^{(p-1)/q} mod p
hは、h{(p-1)/q} mod p > 1を満たす、1 < h < p-1内の任意の整数。
(gは、位数 q mod pをもつ。すなわち、g^q mod p = 1 if g != 1)
ZZを元に、MAC鍵(共有の秘密鍵)を生成する事ができる。